【问题标题】:PHP Pretty URLs combination of two mod_rewrite rules?PHP Pretty URLs 两个 mod_rewrite 规则的组合?
【发布时间】:2016-12-17 18:19:12
【问题描述】:

我在根文件夹中有这个 .htaccess 代码来替换这个 url:localhost/mysite/profile.php?username="someone" 变成 localhost/mysite/someone

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /mysite/profile.php?username=$1

这工作正常,但我想要包含子页面,例如 about 页面为 localhost/mysite/about 而不是 localhost/mysite/about.php。子页面也在根文件夹中。

如何实现这两个重写?

【问题讨论】:

  • 这个.htaccess 是否位于mysite/ 目录中?
  • 是的,在 localhost/mysite 中。 index.php 和 about.php 所在的位置。
  • FWIW...“将这个 url:localhost/mysite/profile.php?username="someone" 替换为 localhost/mysite/someone” - 似乎很多人经常使用这种 reverse-like 描述 (?),但是你的代码实际上完全相反....../mysite/someone被重写为/mysite/profile.php?username=someone。 (?!)

标签: php apache .htaccess mod-rewrite xampp


【解决方案1】:

试试下面的代码,它对我来说很好。

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

【讨论】:

  • 它适用于子页面,但另一个已被替换,它现在不起作用,它是来自 localhost/mysite/profile.php 的 localhost/mysite/user123?用户名=用户名123
  • 这将与现有指令冲突(无论顺序如何)。您需要包含 条件 以排除看起来像用户配置文件的 URL(即与物理文件不直接匹配的 URL)。
【解决方案2】:

试试这个

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^mysite/([A-Za-z0-9-]+)$ /mysite/profile.php?username=$1

【讨论】:

  • 抱歉,两者现在都不起作用。 @anubhava 已经回答了我的问题。多谢你们! :)
【解决方案3】:

您可以在mysite/.htaccess

RewriteEngine On 
RewriteBase /mysite/

# add .php internally to files
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+?)/?$ $1.php [L]

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

【讨论】:

  • 哇,先生真快!太感谢了! :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2012-07-23
相关资源
最近更新 更多