Примером этого исключаемого исключения является: Когда вы пытаетесь проверить что-то, это null.
Например:
string testString = null; //Because it doesn't have a value (i.e. it's null; "Length" cannot do what it needs to do)
if (testString.Length == 0) // Throws a nullreferenceexception
{
//Do something
}
Время выполнения .NET исключение NullReferenceException при попытке выполнить действие над чем-то, что не было инстанцировано, т.е. код выше.
По сравнению с ArgumentNullException, которое обычно выбрано как защитная мера, если метод ожидает, что то, что происходит
Дополнительная информация находится в C # NullReferenceException и Null Parameter .
Спасибо за ваши ответы. Я уже решил свою проблему. Предположим, что у меня есть мои страницы в разделе http://www.yoursite.com/html , применяются следующие правила .htaccess.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*).html\ HTTP/
RewriteRule .* http://localhost/html/%1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /html/(.*)\ HTTP/
RewriteRule .* %1.html [L]
</IfModule>
Я использую этот .htaccess для удаления расширения .html с моего сайта url, пожалуйста, проверьте, что это правильный код:
RewriteEngine on
RewriteBase /
RewriteCond %{http://www.proofers.co.uk/new} !(\.[^./]+)$
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule (.*) /$1.html [L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^.]+)\.html\ HTTP
RewriteRule ^([^.]+)\.html$ http://www.proofers.co.uk/new/$1 [R=301,L]
Вам нужно будет убедиться, что у вас есть Options -MultiViews
.
Ни одно из вышеперечисленных не работало для меня на стандартном хосте cPanel.
Это сработало:
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.html [NC,L]
Я думаю, что какое-то объяснение ответа Джона было бы конструктивным. Следующее:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
проверяет, что если указанный файл или каталог соответственно не существует, то правило перезаписи продолжается:
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Но что это значит? Он использует регулярное выражение (регулярные выражения) . Вот немного чего-то, что я сделал ранее ...
I думаю, это правильно.
ПРИМЕЧАНИЕ. При тестировании вашего .htaccess
не используют 301 переадресацию. Используйте 302 до завершения тестирования, так как браузер будет кэшировать 301-е. См. https://stackoverflow.com/a/9204355/3217306
Обновление: я был слегка ошибочен, .
соответствует всем символам, кроме строк новой строки, поэтому включает пробелы. Кроме того, здесь является полезным чит-листом regex
Источники:
http://community.sitepoint.com/t/what-does -this-mean-rewritecond-request-filename-fd / 2034/2
https://mediatemple.net/community/products/dv/204643270/using-htaccess- переписать-правила
RewriteRule /(.+)(\.html)$ /$1 [R=301,L]
Попробуйте это :) не знаю, работает ли это.
С .htaccess под apache вы можете сделать перенаправление следующим образом:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)\.html$ /$1 [L,R=301]
Что касается удаления .html из url, просто ссылку на страницу без .html
<a href="http://www.example.com/page">page</a>
Чтобы удалить расширение .html из ваших URL-адресов, вы можете использовать следующий код в файле root / htaccess:
RewriteEngine on
RewriteCond %{THE_REQUEST} /([^.]+)\.html [NC]
RewriteRule ^ /%1 [NC,L,R]
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^ %{REQUEST_URI}.html [NC,L]
ПРИМЕЧАНИЕ. Если вы хотите удалить любое другое расширение, например, чтобы удалить .php, просто замените html всюду php в коде выше.
Это должно сработать для вас:
#example.com/page will display the contents of example.com/page.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]
#301 from example.com/page.html to example.com/page
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /.*\.html\ HTTP/
RewriteRule ^(.*)\.html$ /$1 [R=301,L]