Как я могу сделать все мои URL-адреса без расширения, без косой черты. И перенаправить .php и косую черту в нет? - PullRequest
3 голосов
/ 04 апреля 2011

Я хочу, чтобы все мои URL были одинаково чистыми.Это означает, что все мои URL не имеют ни расширений, ни конечной косой черты, и если человек вводит .php или конечную косую черту, он просто перенаправляет человека на чистый URL.

Пример:

example.com/blog/file.php

и

example.com/blog/file/

перенаправят на

example.com/blog/file

Ответы [ 4 ]

5 голосов
/ 12 июня 2011

В .htaccess попробуйте это:

RewriteEngine on

#unless directory, remove trailing slash
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [R=301,L]

#resolve .php file for extensionless php urls
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ $1.php [L]

#redirect external .php requests to extensionless url
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php /$1 [R=301,L]
3 голосов
/ 13 сентября 2011

Недавно мой веб-хостинг (сентябрь 2011 г.) обновил свои серверы Apache до более новой версии Apache, и мой старый код .htaccess для отображения URL-адресов без расширений больше не работал. После значительного объема копирования кода (который, вероятно, работал с более старыми версиями ОС Apache) и неудачного тестирования я смог определить, что следующий код работает на моем сервере и некоторых других:

Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /([^/]+/)*[^.#?\ ]+\.php([#?][^\ ]*)?\ HTTP/
RewriteRule ^(([^/]+/)*[^.]+)\.php http://www.example.com/$1 [R=301,L]

Дайте этому попытку - -Multiviews, казалось, был ключевым элементом, чтобы заставить его работать.

0 голосов
/ 02 июля 2017
# Turn off the need of directory slash redirecting
DirectorySlash Off

# Turn on RewriteEngine
RewriteEngine On

# Internally redirect request to php file
RewriteCond "%{REQUEST_FILENAME}" !-f
RewriteCond "%{REQUEST_FILENAME}\.php" -f
RewriteRule "(.*)" "$1.php" [L]

# External redirects
# The above line is used to determine whether a internal redirect is done or not.
# If it is internally redirected, REDIRECT_STATUS will become 200.
# RewriteCond "%{ENV:REDIRECT_STATUS}" "^$"

# Redirect request with .php extension to extensionless
RewriteCond "%{ENV:REDIRECT_STATUS}" "^$"
RewriteRule "(.*)\.php$" "$1" [R=301]

# Redirect request with trailing slash to slashless
RewriteCond "%{ENV:REDIRECT_STATUS}" "^$"
RewriteCond "%{REQUSET_FILENAME} -d
RewriteCond "%{REQUSET_FILENAME} !-f
RewriteRule "(.*)\/" "$1" [R=301]
0 голосов
/ 04 апреля 2011

Если ваш веб-сайт размещен на сервере Linux с включенным модулем Apache Mod-Rewrite, вы можете использовать .htaccess для перенаправления ваших файлов.Эта ссылка с информацией о том, как отформатировать файл для вашей цели , может помочь.

...