如何使用rewrite_mod重命名url?

时间:2016-06-06 03:02:15

标签: php .htaccess

我不是专业人士,但在我的帮助下,我可以使用Rewrite_mod使用以下内容为我的项目中的用户重命名配置文件页面网址:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)/$ profile.php?username=$1 [QSA]

这很好用。但我无法弄清楚如何为特定页面指定特定名称。例如,当用户转到该页面时,我有一个页面profile_settings.php我希望它在地址栏中为example.com/settings。尝试了一些方法,例如删除.php,认为它会删除所有文件的php扩展名,但它根本不起作用。现在我的.htaccess看起来像:

RewriteEngine On
RewriteRule ^([a-zA-Z0-9_-]+)$ profile.php?username=$1 [QSA] 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^\.]+)$ $1.php [NC,L]

希望example.com/profile_settings.php成为example.com/profile_settings,但它不起作用它仍然是文件扩展名的完整地址。如果我可以单独处理单个文件将是好的,因为除了删除扩展我还希望它给出所需的名称。

1 个答案:

答案 0 :(得分:1)

/settings -> /profile_settings.php等特定情况的重写需要单独处理,之前其他通用规则:

RewriteEngine On

# specific rewrite rules
RewriteCond %{THE_REQUEST} /profile_settings\.php[\s/?] [NC]
RewriteRule ^ /settings [R=301,L]

RewriteRule ^settings/?$ profile_settings.php [L,NC]

# add .php extension if corresponding .php file exists    
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

# handle profile page
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([\w-]+)/?$ profile.php?username=$1 [QSA,L]