htaccess 使用 url 参数重定向到子文件夹

htaccess redirect to subfolder with url paramethers

我想将每个请求重定向到我的 public/index.php 文件。我试过了

RewriteEngine On 
    
RewriteRule ^(.*)$ public/index.php?url=

看起来不错但无法正常工作的代码。我的目标是改变 url 形式 http://example.com/?url=user/profile/2 to http://example.com/user/profile/2。 我的目录结构是

要处理像这样的 URL:http://example.com/user/profile/2 请尝试遵循 .htaccess 文件中的规则集。将您的 htaccess 规则文件放入根目录。请确保在测试您的 URL 之前清除您的浏览器缓存。

Options -MultiViews
RewriteEngine ON
RedirectBase /ApadanaCMS/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/([^/]*)/(.*)/?$ public/index.php?url=// [L]


OR 尝试遵循规则,请确保一次只尝试以上 OR 遵循规则。

以上将适用于不存在的页面,使其适用于任何 url(就像您在问题中提到的那样)尝试:

Options -MultiViews
RewriteEngine ON
RedirectBase /ApadanaCMS/
RewriteCond %{REQUEST_FILENAME} !index\.php [NC]
RewriteRule ^([^/]*)/([^/]*)/(.*)/?$ public/index.php?url=// [L]

解决方法如下: 取消注释(删除 #mod_rewrite.so 模块在 httpd.conf 文件中的 apache2(在我的例子中是 c:\Apache24\conf\httpd.conf)文件。还要在该文件的 DocumentRoot "${SRVROOT}/htdocs" 部分下将 AllowOverride none 更改为 AllowOverride All

这是 .htaccess 内容

RewriteEngine on

RewriteRule ^(.*)$ public/index.php?url= [QSA,L]
RewriteRule ^()$ public/index.php?url= [QSA,L]

但是,如果您需要在静态目录中获取静态文件,请在静态目录中添加一个新的 .htaccess 文件,内容为 RewriteEngine off