PHP重写URL htaccess的多个条件

时间:2018-10-27 10:31:59

标签: php .htaccess url url-rewriting

我正在尝试重写URL地址,但是没有取得太大进展。 我读了很多书并尝试了,但是我没有做我想做的事。如果有人提出想法,我会很高兴。 我想做的是:

  1. 例如删除“ .php ”扩展名。 “ site.com/about
  2. 如果我输入“ site.com/index.php ”或“ site.com/index ”以 重定向到“ site.com
  3. 如果我键入“ site.com/profile.php?profile=alex ”以将URL重写为“ site.com/profile/alex

还要保留我包含的文件的路径,例如css,js,图像或php。

我分别尝试过的方法:

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

2。 RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ /index.php?/$1 [L]

3。 RewriteEngine On RewriteRule ^profile/(.+)[/]?$ profile.php?profile=$1

1 个答案:

答案 0 :(得分:1)

您可以在网站根.htaccess中拥有以下规则:

Options -MultiViews
RewriteEngine On

# external redirect from actual URL to pretty one
RewriteCond %{THE_REQUEST} \s/+profile\.php\?profile=([^\s&]+)\s [NC]
RewriteRule ^ /%1? [R=302,L,NE]

# To externally redirect /dir/file.php to /dir/file
RewriteCond %{THE_REQUEST} \s/+(.*?/)?(?:index|(\S+?))\.php[\s?] [NC]
RewriteRule ^ /%1%2 [R=301,L,NE]

# To internally forward /dir/file to /dir/file.php
RewriteCond %{DOCUMENT_ROOT}/$1.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

# internal forward from pretty URL to actual one
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)/?$ profile.php?profile=$1 [L,QSA]